/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package models.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.List;
import models.entity.Producto;
import models.entity.Usuario;
import utilidades.DataBaseInstance;

/**
 *
 * @author escuelachiloe
 */
public class UsuarioDao {

    protected Connection getConnection() {
        return DataBaseInstance.getInstanceConnection();
    }

    public List<Usuario> findAll() {
        List<Usuario> listaUsuario = new LinkedList<Usuario>();
        ResultSet result = null;

        try {

            String query = "SELECT * FROM usuario";
            Statement stmt = getConnection().createStatement();
            result = stmt.executeQuery(query);

            while (result.next()) {
                Usuario usuario = new Usuario();
                usuario.setUsuario_Codigo(result.getInt("usuario_Codigo"));
                usuario.setUsuario_Nombre(result.getString("usuario_Nombre"));
                usuario.setUsuario_Apellido(result.getString("usuario_Apellido"));
                usuario.setUsuario_User(result.getString("usuario_User"));
                usuario.setUsuario_Clave(result.getString("usuario_Clave"));
                usuario.setUsuario_Privilegio(result.getInt("usuario_Privilegio"));
                listaUsuario.add(usuario);
            }

            result.close();
            stmt.close();
            closeConnection();

        } catch (SQLException se) {
            System.out.println(se.toString());
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return listaUsuario;
    }

    public Usuario findById(int usuario_Codigo) {
        ResultSet result = null;
        Usuario usuario = null;

        try {
            // Componemos la sentencia SQL para obtener los productos.
            String query = "SELECT * FROM usuario WHERE  usuario_Codigo = ?";

            // Ejecutamos la query y obtenemos el resultado.
            PreparedStatement stmt = getConnection().prepareStatement(query);
            stmt.setInt(1, usuario_Codigo);
            result = stmt.executeQuery();

            // Vemos si no ha devuelto ningun resultado.
            if (!result.next()) {
                throw new SQLException();
            }

            // Construimos una VO para el producto.
            usuario = new Usuario();
            usuario.setUsuario_Codigo(result.getInt("usuario_Codigo"));
            usuario.setUsuario_Nombre(result.getString("usuario_Nombre"));
            usuario.setUsuario_Apellido(result.getString("usuario_Apellido"));
            usuario.setUsuario_User(result.getString("usuario_User"));
            usuario.setUsuario_Clave(result.getString("usuario_Clave"));
            usuario.setUsuario_Privilegio(result.getInt("usuario_Privilegio"));

            result.close();
            stmt.close();
            closeConnection();

        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return usuario;
    }

    public void save(Usuario usuario) {

        PreparedStatement saveUsuario;
        try {

            if (usuario.getUsuario_Codigo()== 0) {
                saveUsuario = getConnection().prepareStatement(
                        "INSERT INTO usuario (usuario_Nombre, usuario_Apellido,usuario_User,usuario_Clave,usuario_Privilegio) "
                        + "VALUES ( ?, ?, ?, ?, ?)");
                saveUsuario.setString(1, usuario.getUsuario_Nombre());
                saveUsuario.setString(2, usuario.getUsuario_Apellido());
                saveUsuario.setString(3, usuario.getUsuario_User());
                saveUsuario.setString(4, usuario.getUsuario_Clave());
                saveUsuario.setInt(5, usuario.getUsuario_Privilegio());
                System.out.println("INSERT INTO ....");
            } else {
                System.out.println("Update ....");
                saveUsuario = getConnection().prepareStatement(
                        "UPDATE usuario SET usuario_Nombre = ?, usuario_Apellido = ?,usuario_User= ?,"
                                + "usuario_Clave= ?,usuario_Privilegio= ? where usuario_Codigo= "+usuario.getUsuario_Codigo());
                saveUsuario.setString(1, usuario.getUsuario_Nombre());
                saveUsuario.setString(2, usuario.getUsuario_Apellido());
                saveUsuario.setString(3, usuario.getUsuario_User());
                saveUsuario.setString(4, usuario.getUsuario_Clave());
                saveUsuario.setInt(5, usuario.getUsuario_Privilegio());
                saveUsuario.setInt(6, usuario.getUsuario_Codigo());
            }

            saveUsuario.executeUpdate();
            closeConnection();
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }
    }

    public void delete(Usuario usuario) {
        PreparedStatement saveProduct;
        try {

            if (usuario.getUsuario_Codigo()> 0) {
                saveProduct = getConnection().prepareStatement(
                        "DELETE FROM usuario WHERE usuario_Codigo = ?");
                saveProduct.setInt(1, usuario.getUsuario_Codigo());
                saveProduct.executeUpdate();
            }
            closeConnection();
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }
    }
    
     public Usuario verificarUsuario(String user, String clave){
        Usuario u=null;
        Connection cn=null;
        PreparedStatement pr=null;
        ResultSet rs=null;
        try{
            cn=getConnection();
            String sql="SELECT * FROM Usuario WHERE usuario_User=? AND usuario_Clave=?";
            pr=cn.prepareStatement(sql);
            pr.setString(1, user);
            pr.setString(2, clave);
            rs=pr.executeQuery();
            while(rs.next()){
                u=new Usuario();
                u.setUsuario_Codigo(rs.getInt("usuario_Codigo"));
                u.setUsuario_Nombre(rs.getString("usuario_Nombre"));
                u.setUsuario_Apellido(rs.getString("usuario_Apellido"));
                u.setUsuario_User(rs.getString("usuario_User"));
                u.setUsuario_Clave( rs.getString("usuario_Clave"));
                u.setUsuario_Privilegio(rs.getInt("usuario_Privilegio"));
                break;
            }
        }catch(SQLException ex){
            ex.printStackTrace();
            u=null;
        }finally{
            try{
                rs.close();
                pr.close();
                rs.close();
            }catch(SQLException ex){

            }
        }
        return u;
    }
    protected void closeConnection() {
        DataBaseInstance.closeConnection();
    }
}